package h0908;

import java.util.Arrays;

/**
 * @author 不知名帅哥
 * @version 1.0
 * @description 颜色分类
 * @date 2024/9/8 10:51
 */
public class ClassifyColor {
    public static void main(String[] args) {
        int[] nums = {0, 0, 1, 2, 0, 1, 0};
        sortColors(nums);
        System.out.println(Arrays.toString(nums));
    }

    public static void sortColors(int[] nums) {
        //使用双指针的方法
        int low = 0; //红色区域结束位置下一位
        int mid = 0; //当前指向的位置
        int high = nums.length - 1; //蓝色区域的起始位置前一位

        while (mid <= high) {
            if (nums[mid] == 0) {
                //如果当前位置等于0，需要交换红色区域下一位和当前位置元素
                swap(nums, low, mid);
                low++;
                mid++;
                //按照我的理解就是交换之后其实是0，1的交换，前面已经遍历过的都是1，所以交换之后不变。
            } else if (nums[mid] == 1) {
                mid++;
            } else {
                swap(nums, mid, high);
                high--;
                //这里不能mid++,因为还需要判断交换后的元素是否0或者1
            }
        }
    }

    private static void swap(int[] nums, int a, int b) {
        int temp = nums[a];
        nums[a] = nums[b];
        nums[b] = temp;
    }
}
